package br.com.sistema.smallAgro.login;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.feedback.ExactLevelFeedbackMessageFilter;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;

import br.com.sistema.smallAgro.Principal;
import br.com.sistema.smallAgro.AS.UsuarioAS;
import br.com.sistema.smallAgro.modelo.Usuario;

public class LoginForm extends Form<Usuario> {
	private static final long serialVersionUID = 9066442192995520985L;
	private Usuario usuario;
	private TextField<String> login;
	private TextField<String> senha;
	private Component feedback;

	@SpringBean
	private UsuarioAS usuarioAS;

	public LoginForm(String id) {
		super(id, new CompoundPropertyModel<Usuario>(new Usuario()));

		add(feedback = new FeedbackPanel("msgErro",
				new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR))
				.setOutputMarkupId(true));

		add(new FeedbackPanel("msgSucesso",
				new ExactLevelFeedbackMessageFilter(FeedbackMessage.SUCCESS))
				.setOutputMarkupId(true));
		criaCampos();
	}

	private void criaCampos() {
		add(senha = new TextField<String>("senha"));
		add(login = new TextField<String>("login"));

		add(new AjaxButton("autenticar") {
			private static final long serialVersionUID = -7229151415634841143L;

			@Override
			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
				usuario = (Usuario) form.getModelObject();
				isValido();
				if (!getSession().getFeedbackMessages().isEmpty()) {
					target.add(feedback);
				} else {
					if (usuarioAS.buscaUsuario(usuario)) {
						setResponsePage(new Principal());
						System.out.println("ENTROU NO SISTEMA!");
					} else {
						feedback.error("Usuário ou Senha incorretos, favor verificar.");
					}
					setResponsePage(new Principal());
				}
				target.add(feedback);
			}

			@Override
			protected void onError(AjaxRequestTarget target, Form<?> form) {
				target.add(feedback);
			}

			private void isValido() {
				if (senha.getModelObject() == null) {
					feedback.error("Dados obrigatórios não informados");
				}
				if (login.getModelObject() == null) {
					feedback.error("Dados obrigatórios não informados");
				}
			}
		});
	}
}